<!DOCTYPE html>
<html lang="en">

  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>03.同步异步例子</title>
  </head>

  <body>

  </body>
  <script>
    var a = 1
    var b = 2
    var d1 = new Date().getTime()
    var d2 = new Date().getTime()
    // 异步
    setTimeout(function () {
      console.log('我是⼀个异步任务') //跟下面的a+b=3,一起输出了
    }, 1000)
    // 同步
    while (d2 - d1 < 2000) {
      d2 = new Date().getTime()
    }
    console.log(a + b)
    //这段代码在输出3之前会进⼊假死状态，'我是⼀个异步任务'⼀定会在3之后输出，
    // 异步任务放在暂存区， 等待同步任务执行完再执行， 无论同步任务等待多久
    /* 
    观察上面的程序我们实际运行之后就会感受到单线程异步模型的执行顺序了， 并且这里我们会发现 setTimeout 
    设置的时间是 1000 毫秒，但是在while 的阻塞 2000 毫秒的循环之后并没有等待 1 秒而是直接输出了
    我是一个异步任务，这是因为 setTimout 的时间计算是从 setTimeout() 这个函数执行时开始计算的。    */
  </script>

</html>